home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 2000 October / Software of the Month - Ultimate Collection Shareware 277.iso / pc / PROGRAMS / UTILITY / WINLINUX / DATA1.CAB / programs_-_include / ASM-SPAR.{_6 / TERMIOS.H < prev    next >
C/C++ Source or Header  |  1999-09-17  |  5KB  |  172 lines

  1. /* $Id: termios.h,v 1.29 1999/03/25 09:11:18 davem Exp $ */
  2. #ifndef _SPARC_TERMIOS_H
  3. #define _SPARC_TERMIOS_H
  4.  
  5. #include <asm/ioctls.h>
  6. #include <asm/termbits.h>
  7.  
  8. #if defined(__KERNEL__) || defined(__DEFINE_BSD_TERMIOS)
  9. struct sgttyb {
  10.     char    sg_ispeed;
  11.     char    sg_ospeed;
  12.     char    sg_erase;
  13.     char    sg_kill;
  14.     short    sg_flags;
  15. };
  16.  
  17. struct tchars {
  18.     char    t_intrc;
  19.     char    t_quitc;
  20.     char    t_startc;
  21.     char    t_stopc;
  22.     char    t_eofc;
  23.     char    t_brkc;
  24. };
  25.  
  26. struct ltchars {
  27.     char    t_suspc;
  28.     char    t_dsuspc;
  29.     char    t_rprntc;
  30.     char    t_flushc;
  31.     char    t_werasc;
  32.     char    t_lnextc;
  33. };
  34. #endif /* __KERNEL__ */
  35.  
  36. struct sunos_ttysize {
  37.     int st_lines;   /* Lines on the terminal */
  38.     int st_columns; /* Columns on the terminal */
  39. };
  40.  
  41. /* Used for packet mode */
  42. #define TIOCPKT_DATA         0
  43. #define TIOCPKT_FLUSHREAD     1
  44. #define TIOCPKT_FLUSHWRITE     2
  45. #define TIOCPKT_STOP         4
  46. #define TIOCPKT_START         8
  47. #define TIOCPKT_NOSTOP        16
  48. #define TIOCPKT_DOSTOP        32
  49.  
  50. struct winsize {
  51.     unsigned short ws_row;
  52.     unsigned short ws_col;
  53.     unsigned short ws_xpixel;
  54.     unsigned short ws_ypixel;
  55. };
  56.  
  57. /* line disciplines */
  58. #define N_TTY        0
  59. #define N_SLIP        1
  60. #define N_MOUSE        2
  61. #define N_PPP        3
  62. #define N_STRIP        4
  63. #define N_AX25        5
  64. #define N_X25        6
  65. #define N_6PACK        7
  66. #define N_MASC        8    /* Reserved for Mobitex module <kaz@cafe.net> */
  67. #define N_R3964        9    /* Reserved for Simatic R3964 module */
  68. #define N_PROFIBUS_FDL    10    /* Reserved for Profibus <Dave@mvhi.com> */
  69. #define N_IRDA        11    /* Linux IrDa - http://www.cs.uit.no/~dagb/irda/irda.html */
  70. #define N_SMSBLOCK    12    /* SMS block mode - for talking to GSM data cards about SMS messages */
  71. #define N_HDLC        13    /* synchronous HDLC */
  72.  
  73. #ifdef __KERNEL__
  74.  
  75. /*
  76.  * c_cc characters in the termio structure.  Oh, how I love being
  77.  * backwardly compatible.  Notice that character 4 and 5 are
  78.  * interpreted differently depending on whether ICANON is set in
  79.  * c_lflag.  If it's set, they are used as _VEOF and _VEOL, otherwise
  80.  * as _VMIN and V_TIME.  This is for compatibility with OSF/1 (which
  81.  * is compatible with sysV)...
  82.  */
  83. #define _VMIN    4
  84. #define _VTIME    5
  85.  
  86.  
  87. /*    intr=^C        quit=^\        erase=del    kill=^U
  88.     eof=^D        eol=\0        eol2=\0        sxtc=\0
  89.     start=^Q    stop=^S        susp=^Z        dsusp=^Y
  90.     reprint=^R    discard=^U    werase=^W    lnext=^V
  91.     vmin=\1         vtime=\0
  92. */
  93. #define INIT_C_CC "\003\034\177\025\004\000\000\000\021\023\032\031\022\025\027\026\001\000"
  94.  
  95. /*
  96.  * Translate a "termio" structure into a "termios". Ugh.
  97.  */
  98. #define user_termio_to_kernel_termios(termios, termio) \
  99. ({ \
  100.     unsigned short tmp; \
  101.     get_user(tmp, &(termio)->c_iflag); \
  102.     (termios)->c_iflag = (0xffff0000 & ((termios)->c_iflag)) | tmp; \
  103.     get_user(tmp, &(termio)->c_oflag); \
  104.     (termios)->c_oflag = (0xffff0000 & ((termios)->c_oflag)) | tmp; \
  105.     get_user(tmp, &(termio)->c_cflag); \
  106.     (termios)->c_cflag = (0xffff0000 & ((termios)->c_cflag)) | tmp; \
  107.     get_user(tmp, &(termio)->c_lflag); \
  108.     (termios)->c_lflag = (0xffff0000 & ((termios)->c_lflag)) | tmp; \
  109.     copy_from_user((termios)->c_cc, (termio)->c_cc, NCC); \
  110.     0; \
  111. })
  112.  
  113. /*
  114.  * Translate a "termios" structure into a "termio". Ugh.
  115.  *
  116.  * Note the "fun" _VMIN overloading.
  117.  */
  118. #define kernel_termios_to_user_termio(termio, termios) \
  119. ({ \
  120.     put_user((termios)->c_iflag, &(termio)->c_iflag); \
  121.     put_user((termios)->c_oflag, &(termio)->c_oflag); \
  122.     put_user((termios)->c_cflag, &(termio)->c_cflag); \
  123.     put_user((termios)->c_lflag, &(termio)->c_lflag); \
  124.     put_user((termios)->c_line,  &(termio)->c_line); \
  125.     copy_to_user((termio)->c_cc, (termios)->c_cc, NCC); \
  126.     if (!((termios)->c_lflag & ICANON)) { \
  127.         put_user((termios)->c_cc[VMIN], &(termio)->c_cc[_VMIN]); \
  128.         put_user((termios)->c_cc[VTIME], &(termio)->c_cc[_VTIME]); \
  129.     } \
  130.     0; \
  131. })
  132.  
  133. #define user_termios_to_kernel_termios(k, u) \
  134. ({ \
  135.     get_user((k)->c_iflag, &(u)->c_iflag); \
  136.     get_user((k)->c_oflag, &(u)->c_oflag); \
  137.     get_user((k)->c_cflag, &(u)->c_cflag); \
  138.     get_user((k)->c_lflag, &(u)->c_lflag); \
  139.     get_user((k)->c_line,  &(u)->c_line); \
  140.     copy_from_user((k)->c_cc, (u)->c_cc, NCCS); \
  141.     if((k)->c_lflag & ICANON) { \
  142.         get_user((k)->c_cc[VEOF], &(u)->c_cc[VEOF]); \
  143.         get_user((k)->c_cc[VEOL], &(u)->c_cc[VEOL]); \
  144.     } else { \
  145.         get_user((k)->c_cc[VMIN],  &(u)->c_cc[_VMIN]); \
  146.         get_user((k)->c_cc[VTIME], &(u)->c_cc[_VTIME]); \
  147.     } \
  148.     0; \
  149. })
  150.  
  151. #define kernel_termios_to_user_termios(u, k) \
  152. ({ \
  153.     put_user((k)->c_iflag, &(u)->c_iflag); \
  154.     put_user((k)->c_oflag, &(u)->c_oflag); \
  155.     put_user((k)->c_cflag, &(u)->c_cflag); \
  156.     put_user((k)->c_lflag, &(u)->c_lflag); \
  157.     put_user((k)->c_line, &(u)->c_line); \
  158.     copy_to_user((u)->c_cc, (k)->c_cc, NCCS); \
  159.     if(!((k)->c_lflag & ICANON)) { \
  160.         put_user((k)->c_cc[VMIN],  &(u)->c_cc[_VMIN]); \
  161.         put_user((k)->c_cc[VTIME], &(u)->c_cc[_VTIME]); \
  162.     } else { \
  163.         put_user((k)->c_cc[VEOF], &(u)->c_cc[VEOF]); \
  164.         put_user((k)->c_cc[VEOL], &(u)->c_cc[VEOL]); \
  165.     } \
  166.     0; \
  167. })
  168.  
  169. #endif    /* __KERNEL__ */
  170.  
  171. #endif /* _SPARC_TERMIOS_H */
  172.